import pandas as pd

# 读取文件
landarea = pd.read_excel('附件1.xlsx', sheet_name='乡村的现有耕地')
plant_plan = pd.read_excel('附件2.xlsx', sheet_name='2023年的农作物种植情况')
plant_data = pd.read_csv('CorpData.csv')

# 处理缺失值
plant_plan['种植地块'] = plant_plan['种植地块'].fillna(method='ffill')

# 对地块名称和类型之间映射及替换
land_mapping = dict(zip(landarea['地块名称'], landarea['地块类型']))
plant_plan['地块类型'] = [land_mapping.get(land_name) for land_name in plant_plan['种植地块']]

# 初步计算
plant_data['except_area'] = plant_data['亩产量/斤'] * plant_data['平均销售单价'] - plant_data['种植成本/(元/亩)']

# 合并数据
plant_useplan = plant_plan[['作物名称', '地块类型', '种植季次', '种植面积/亩']]
plant_usedata = plant_data[['作物名称', '地块类型', '种植季次', 'except_area']]

# 去除 plant_useplan 和 plant_usedata 中指定列的空格
plant_useplan[['作物名称', '地块类型', '种植季次']] = plant_useplan[['作物名称', '地块类型', '种植季次']].apply(lambda x: x.str.strip())
plant_usedata[['作物名称', '地块类型', '种植季次']] = plant_usedata[['作物名称', '地块类型', '种植季次']].apply(lambda x: x.str.strip())

## 计算利润
# 定义plant_plan中各种作物种植方案在plant_data中的索引
def judge_index(data_one,data_two):
    index_num = []
    a_check = 0
    count=0
    row = data_one.shape[0]
    row2 = data_two.shape[0]
    for i in range(row):
        xdata = data_one.iloc[i,:]
        for j in range(row2):
            if xdata['作物名称']==data_two.loc[j,'作物名称'] and xdata['地块类型']==data_two.loc[j,'地块类型']: #and xdata['种植季次']==data_two.loc[j,'种植季次']:
                index_num.append(j)
                a_check = 1
                # 如果遇到匹配的行，则跳出内层循环
                break
            else : a_check = 0
        if a_check==0: 
            print(xdata) #表示没有匹配
            count+=1    #对未匹配上的农作物进行统计
    print(count,count+len(index_num)==row)
    return index_num
    

index_select = judge_index(plant_useplan,plant_usedata)

except_area = plant_data.loc[index_select,'except_area'].reset_index(drop=True)
plant_plan['except_area'] = except_area
plant_plan['利润'] =plant_plan['种植面积/亩']*plant_plan['except_area']


'''
ValueError: cannot reindex from a duplicate axis 错误通常发生在使用 Pandas 时，
尝试对包含重复索引的 DataFrame 或 Series 进行重索引（reindex）操作。
Pandas 不允许在存在重复索引的情况下进行某些操作，比如重排或重建索引，因为这可能导致数据的不确定性。

--> index_select包含重复索引，因此plant_data.loc[index_select,'except_area']-->报错
'''

# 计算总利润
print(plant_plan['利润'].sum())

# 保存结果
plant_plan.to_csv('2023年种植方案总利润-2.csv', index=False)

# 打印部分结果
print(plant_plan.head())
